﻿using System;
using System.Data.SqlClient;
using System.Windows.Forms;
using VentaElectrodomesticos.Sql;
using VentaElectrodomesticos.Utilities;
using System.Collections.Generic;

namespace VentaElectrodomesticos.AbmCliente
{
    /// <summary>
    /// TODO: falta hacerle toda la parte de la validacion
    /// </summary>
    public partial class FormAltaCliente : Form
    {
        private ClaseSQL sql;

        public FormAltaCliente()
        {
            InitializeComponent();
            sql = new ClaseSQL();
            sql.llenarCombo(cbProvincia, "SELECT idProvincia, nomProvincia FROM LAG.provincias");
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            if (this.validarCampos())
            {
                try
                {
                    sql.Open();
                    KeyValuePair provincia = (KeyValuePair)cbProvincia.SelectedItem;
                    String idProvincia = provincia.Key.ToString();

                    String query = "INSERT INTO LAG.personas (dni, nombre, apellido, mail, telefono, direccion, idProvincia, esCliente)" +
                        "VALUES (" + tbDni.Text + ", '" + tbNombre.Text + "', '" + tbApellido.Text + "', '" + tbMail.Text + "', '" +
                        tbTelefono.Text + "', '" + tbDireccion.Text + "', " + idProvincia + ", 1)";

                    int filasAfectadas = sql.ejecutarNoReader(query);
                    this.btnLimpiar_Click(null, null);
                    MessageBox.Show("Se ha dado de alta exitosamente", "Exito!");
                }
                catch (SqlException ex)
                {
                    //El codigo de error de los keys duplicados es 2601
                    if (ex.Number == 2601)
                    {
                        MessageBox.Show("Ya existe el numero de DNI " + tbDni.Text, "Error al intentar guardar");
                        errorProvider.SetError(tbDni, "Ingrese otro numero de DNI distinto");
                    }
                    else
                    {
                        MessageBox.Show(ex.Message, "Error al intentar guardar");
                    }
                }
                finally
                {
                    sql.Close();
                }
            }
            else
            {
                MessageBox.Show("Hay campos con datos no validos", "Error");
            }
        }


        private void btnLimpiar_Click(object sender, EventArgs e)
        {
            Utils.ClearTextBoxes(this);
            cbProvincia.SelectedIndex = -1;
        }

        private bool validarCampos()
        {
            bool vDni = this.validarDni();
            bool vNombre = !Utils.campoVacio(tbNombre, errorProvider, "Ingrese un nombre");
            bool vApellido = !Utils.campoVacio(tbApellido, errorProvider, "Ingrese un apellido");
            bool vMail = !Utils.campoVacio(tbMail, errorProvider, "Ingrese un mail");
            bool vTelefono = !Utils.campoVacio(tbTelefono, errorProvider, "Ingrese un telefono");
            bool vDireccion = !Utils.campoVacio(tbDireccion, errorProvider, "Ingrese una direccion");
            bool vProvincia = !Utils.campoVacio(cbProvincia, errorProvider, "Seleccione una provincia");

            return vDni && vNombre && vApellido && vMail && vTelefono && vDireccion && vProvincia;
        }

        private bool validarDni()
        {
            bool valido = true;

            if (tbDni.Text.Trim().Length == 0)
            {
                valido = false;
                errorProvider.SetError(tbDni, "Ingrese un numero de DNI");
            }
            else
            {
                errorProvider.SetError(tbDni, "");
            }

            return valido;
        }


        private void ingresarSoloNumericos(object sender, KeyPressEventArgs e)
        {
            if (!System.Text.RegularExpressions.Regex.IsMatch(e.KeyChar.ToString(), "[0-9\b]+"))
                e.Handled = true;
        }
    }
}
